package negocio;

import java.sql.Date;
import java.util.ArrayList;
import java.util.Iterator;

import javax.sql.rowset.serial.SerialArray;

public class Cursada 
{
	private int id;
	private Date fechaInicio;
	private int maxVacantes;
	private int minVacantes;
	private Curso curso;
	private Usuario instructor;
	private String estado;
	private Examen notaFinal;
	private Usuario usuarioEncargado;
	private String codigoCursada;
	
	public Cursada(Curso curso, Date fechaInicio, int maxVacantes, int minVacantas, Usuario instructor, String estado, Usuario usuarioEncargado)
	{
		this.curso = curso;
		this.fechaInicio = fechaInicio;
		this.maxVacantes = maxVacantes;
		this.minVacantes = minVacantas;
		this.instructor = instructor;		
		this.estado = estado;
		this.setUsuario(usuarioEncargado);
	}
	
	public Cursada(int id, Curso curso, Date fechaInicio, int maxVacantes, int minVacantas, Usuario instructor, String estado, Usuario usuarioEncargado)
	{
		this.id = id;
		this.curso = curso;
		this.fechaInicio = fechaInicio;
		this.maxVacantes = maxVacantes;
		this.minVacantes = minVacantas;
		this.instructor = instructor;		
		this.estado = estado;	
		this.setUsuario(usuarioEncargado);
	}
	
	public Usuario getInstructor() {
		return instructor;
	}
	public void setInstructor(Usuario instructor) {
		this.instructor = instructor;
	}
	public int getId() 
	{
		return id;
	}
	public void setId(int id)
	{
		this.id = id;
	}
	public Date getFechaInicio() 
	{
		return fechaInicio;
	}
	public void setFechaInicio(Date fechaInicio) 
	{
		this.fechaInicio = fechaInicio;
	}
	public int getMaxVacantes() {
		return maxVacantes;
	}
	public void setMaxVacantes(int maxVacantes) 
	{
		this.maxVacantes = maxVacantes;
	}
	public int getMinVacantes() 
	{
		return minVacantes;
	}
	public void setMinVacantes(int minVacantes) 
	{
		this.minVacantes = minVacantes;
	}
	
	public Curso getCurso() {
		return curso;
	}
	public void setCurso(Curso curso) {
		this.curso = curso;
	}

	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	//TODO tengo qe encontrar una forma de hacerlo...
	@SuppressWarnings("deprecation")
	public String getCodigo() {
		
		ArrayList<Cursada> cursadas = CursadaControlador.getAllPorCurso(curso);
		Integer mes = this.fechaInicio.getMonth();
		Integer anio = this.fechaInicio.getYear();
		boolean primerSemestre = mes<6;
		int aux = 1;
		Integer numero = null;
		
		for(Cursada c : cursadas)
		{
			numero = aux;
			if(this.getId() == c.getId())
			{
				break;
			}
			else if(anio == c.fechaInicio.getYear())
			{
				if(primerSemestre)
				{
					if (c.fechaInicio.getMonth()<6)
					{
						aux++;
					}
				}
				else
				{
					if (!(c.fechaInicio.getMonth()<6))
					{
						aux++;
					}
				}
			}
		
		}
		if(numero<9)
		{
			if(primerSemestre)
				return "0" + numero.toString() + this.curso.getSigla()+(this.fechaInicio.getYear()-100)+"/1";
			else
				return "0" + numero.toString() + this.curso.getSigla()+(this.fechaInicio.getYear()-100)+"/2";
		}
		else
		{
			if(primerSemestre)
				return numero.toString() + this.curso.getSigla()+(this.fechaInicio.getYear()-100);
			else
				return numero.toString() + this.curso.getSigla()+(this.fechaInicio.getYear()-100)+"/2";
		}
	}
	
	@Override
	public String toString()
	{
		return getCodigo();
	}

	public Examen getNotaFinal() {
		return notaFinal;
	}

	public void setNotaFinal(Examen notaFinal) {
		this.notaFinal = notaFinal;
	}

	public Usuario getUsuario() {
		return usuarioEncargado;
	}

	public void setUsuario(Usuario usuario) {
		this.usuarioEncargado = usuario;
	}

}
